//
// Created by mmuee on 2023/7/20.
//

#ifndef PIULAB_PIU_DEFINE_HPP
#define PIULAB_PIU_DEFINE_HPP

#include <any>
#include <condition_variable>
#include <cstring>
#include <iostream>
#include <future>
#include <memory>
#include <mutex>
#include <sstream>
#include <stdexcept>
#include <string>
#include <thread>
#include <utility>
#include <vector>
#include <unordered_map>
#include <pthread.h>

#include "log/Loger.hpp"
#include "utils/String.hpp"
#include "utils/Cast.hpp"
#include "utils/Version.hpp"
#include "utils/URI.hpp"
#include "utils/Container.hpp"

#define DISALLOW_ASSIGN(Type) Type(const Type &) = delete
#define DISALLOW_COPY(Type) Type &operator=(const Type &) = delete
#define DISALLOW_COPY_ASSIGN(Type) DISALLOW_ASSIGN(Type);DISALLOW_COPY(Type)

#define NS_PIU_END   }
#define NS_PIU_BEGIN namespace piu {
#define USING_NS_PIU using namespace piu;

#define NS_PORT_END   }
#define NS_PORT_BEGIN namespace port {
#define USING_NS_PORT using namespace port;

#define NS_JNI_END   }
#define NS_JNI_BEGIN namespace jni {
#define USING_NS_JNI using namespace jni;

#define NS_DNI_END   }
#define NS_DNI_BEGIN namespace dni {
#define USING_NS_DNI using namespace dni;

#define NS_OC_END   }
#define NS_OC_BEGIN namespace oc {
#define USING_NS_OC using namespace oc;

#define NS_PJS_END   }
#define NS_PJS_BEGIN namespace pjs {
#define USING_NS_PJS using namespace pjs;

#define NS_FS_END   }
#define NS_FS_BEGIN namespace fs {
#define USING_NS_FS using namespace fs;

#define NS_ENC_END   }
#define NS_ENC_BEGIN namespace enc {
#define USING_NS_ENC using namespace enc;

#define NS_ARCHIVE_END   }
#define NS_ARCHIVE_BEGIN namespace archive {
#define USING_NS_ARCHIVE using namespace archive;

#define NS_PXV_END   }
#define NS_PXV_BEGIN namespace pxv {
#define USING_NS_PXV using namespace pxv;

#define NS_UTILS_END   }
#define NS_UTILS_BEGIN namespace utils {
#define USING_NS_UTILS using namespace utils;

using ObjectPtr = int64_t;
using ObjectRef = std::shared_ptr<void>;
using ObjectWeakRef = ObjectRef::weak_type;

#endif //PIULAB_PIU_DEFINE_HPP
